home *** CD-ROM | disk | FTP | other *** search
/ Czech Logic, Card & Gambling Games / Logické hry.iso / hry / Fish Fillets / script / columns / code.lua next >
Encoding:
Text File  |  2005-07-16  |  16.4 KB  |  439 lines

  1.  
  2. --NOTE: rows must be together in models.lua
  3. local advices1 = {}
  4. local advices1_end = rada1end.index - rada1beg.index
  5. for i = 0, advices1_end do
  6.     advices1[i] = getModelsTable()[rada1beg.index + i]
  7. end
  8.  
  9. local advices2 = {}
  10. local advices2_end = rada2end.index - rada2beg.index
  11. for i = 0, advices2_end do
  12.     advices2[i] = getModelsTable()[rada2beg.index + i]
  13. end
  14.  
  15. -- -----------------------------------------------------------------
  16. -- Init
  17. -- -----------------------------------------------------------------
  18. local function prog_init()
  19.     initModels()
  20.     sound_playMusic("music/rybky05.ogg")
  21.     local pokus = getRestartCount()
  22.  
  23.  
  24.     -- -------------------------------------------------------------
  25.     local function prog_init_room()
  26.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  27.  
  28.         switch(pokus){
  29.             [1] = function()
  30.                 room.uvod = 12
  31.             end,
  32.             default = function()
  33.                 room.uvod = random(4) + random(2) * 10
  34.             end,
  35.         }
  36.         room.kochani = random(2)
  37.         room.pady = 0
  38.         room.osose = random(1500) + 500
  39.  
  40.         return function()
  41.             if isReady(small) and isReady(big) and no_dialog() then
  42.                 if room.osose > 0 then
  43.                     room.osose = room.osose - 1
  44.                 end
  45.                 if room.uvod > 0 then
  46.                     if room.uvod >= 10 and random(100) < 40 then
  47.                         addm(10 + random(40), "sl-m-velkolepe")
  48.                         room.uvod = room.uvod - 10
  49.                     end
  50.                     if math.mod(room.uvod, 10) >= 1 then
  51.                         addv(20, "sl-v-stopa")
  52.                     end
  53.                     if room.uvod > 10 then
  54.                         addm(5 + random(30), "sl-m-velkolepe")
  55.                         room.uvod = room.uvod - 10
  56.                     end
  57.                     if room.uvod >= 2 then
  58.                         addv(5, "sl-v-vkapse")
  59.                     end
  60.                     if room.uvod >= 3 then
  61.                         addm(random(20) + 5, "sl-m-trvat")
  62.                     end
  63.                     room.uvod = 0
  64.                 elseif room.osose == 0 and chlapik.cinnost == 0 then
  65.                     addm(20, "sl-m-sedi")
  66.                     addv(5, "sl-v-feidios")
  67.                     addm(20 + random(50), "sl-m-tehdy")
  68.                     room.osose = -1
  69.                 elseif room.kochani == 0 and room.pady <= 1 and big.dir ~= dir_no and random(100) < 2 then
  70.                     room.kochani = 1
  71.                     big:setBusy(true)
  72.                     addv(0, "sl-v-nechme")
  73.                     adddel(random(90) + 30)
  74.                     planBusy(big, false)
  75.                 elseif room.pady <= 0 and small.X == 33 and small.Y == 27 and ocel.Y < 26 then
  76.                     addv(0, "sl-v-opatrne")
  77.                     room.pady = 1
  78.                 elseif room.pady <= 1 and sochoradi.cinnost >= 8 then
  79.                     addv(0, "sl-v-skoda")
  80.                     room.pady = 2
  81.                 elseif room.pady <= 2 and sochoradi.Y == 16 and samotna.X >= 14 and chlapik.cinnost == 0 then
  82.                     room.pady = 3
  83.                     addv(0, "sl-v-pust")
  84.                 end
  85.             end
  86.         end
  87.     end
  88.  
  89.     -- -------------------------------------------------------------
  90.     local function prog_init_samotna()
  91.         return function()
  92.             if random(100) < 2 then
  93.                 samotna.afaze = random(2) * 2
  94.             end
  95.             if samotna.dir ~= dir_no then
  96.                 samotna.afaze = 1
  97.             end
  98.             samotna:updateAnim()
  99.         end
  100.     end
  101.  
  102.     -- -------------------------------------------------------------
  103.     local function prog_init_rada1beg()
  104.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  105.  
  106.         rada1beg.cinnost = 0
  107.  
  108.         return function()
  109.             switch(rada1beg.cinnost){
  110.                 [0] = function()
  111.                     if random(1000) < 15 then
  112.                         rada1beg.cinnost = random(5) + 2
  113.                         switch(rada1beg.cinnost){
  114.                             [4] = function()
  115.                                 repeat
  116.                                     rada1beg.xicht1 = random(3)
  117.                                 until rada1beg.xicht1 ~= rada1beg.afaze
  118.                                 repeat
  119.                                     rada1beg.xicht2 = random(3)
  120.                                 until rada1beg.xicht2 ~= rada1beg.afaze
  121.                             end,
  122.                             default = function()
  123.                                 if isIn(rada1beg.cinnost, {2, 3}) then
  124.                                     repeat
  125.                                         rada1beg.xicht1 = random(3)
  126.                                     until rada1beg.xicht1 ~= rada1beg.afaze
  127.                                 end
  128.                             end,
  129.                         }
  130.                         rada1beg.faze = 0
  131.                     end
  132.                 end,
  133.                 [1] = function()
  134.                     rada1beg.cinnost = random(3) + 2
  135.                     rada1beg.xicht1 = random(3)
  136.                     rada1beg.xicht2 = random(3)
  137.                     rada1beg.faze = 0
  138.                 end,
  139.                 [2] = function()
  140.                     if odd(game_getCycles()) then
  141.                         advices1[rada1beg.faze].afaze = rada1beg.xicht1
  142.                         rada1beg.faze = rada1beg.faze + 1
  143.                         if rada1beg.faze > advices1_end then
  144.                             rada1beg.cinnost = 0
  145.                         end
  146.                     end
  147.                 end,
  148.                 [3] = function()
  149.                     if odd(game_getCycles()) then
  150.                         advices1[advices1_end - rada1beg.faze].afaze = rada1beg.xicht1
  151.                         rada1beg.faze = rada1beg.faze + 1
  152.                         if advices1_end - rada1beg.faze < 0 then
  153.                             rada1beg.cinnost = 0
  154.                         end
  155.                     end
  156.                 end,
  157.                 [4] = function()
  158.                     if odd(game_getCycles()) then
  159.                         advices1[rada1beg.faze].afaze = rada1beg.xicht1
  160.                         advices1[advices1_end - rada1beg.faze].afaze = rada1beg.xicht2
  161.  
  162.                         rada1beg.faze = rada1beg.faze + 1
  163.                         if rada1beg.faze > advices1_end then
  164.                             rada1beg.cinnost = 0
  165.                         end
  166.                     end
  167.                 end,
  168.                 [5] = function()
  169.                     if random(1000) < 15 then
  170.                         rada1beg.cinnost = 1
  171.                     elseif random(100) < 20 then
  172.                         pom1 = random(advices1_end + 1)
  173.                         advices1[pom1].afaze = random(3)
  174.                     end
  175.                 end,
  176.                 [6] = function()
  177.                     if random(1000) < 15 then
  178.                         rada1beg.cinnost = 1
  179.                     elseif random(100) < 50 then
  180.                         pom1 = random(advices1_end + 1)
  181.                         if random(100) < 20 then
  182.                             advices1[pom1].afaze = random(3)
  183.                         else
  184.                             switch(random(2)){
  185.                                 [0] = function()
  186.                                     if pom1 > 0 then
  187.                                         advices1[pom1].afaze = advices1[pom1 - 1].afaze
  188.                                     end
  189.                                 end,
  190.                                 [1] = function()
  191.                                     if pom1 < advices1_end then
  192.                                         advices1[pom1].afaze = advices1[pom1 + 1].afaze
  193.                                     end
  194.                                 end,
  195.                             }
  196.                         end
  197.                     end
  198.                 end,
  199.                 [7] = function()
  200.                     rada1beg.cinnost = 4
  201.                     rada1beg.xicht1 = 1
  202.                     rada1beg.xicht2 = 1
  203.                     rada1beg.faze = 0
  204.                 end,
  205.             }
  206.             for index, advice in advices1 do
  207.                 advice:updateAnim()
  208.             end
  209.         end
  210.     end
  211.  
  212.     -- -------------------------------------------------------------
  213.     local function prog_init_rada2beg()
  214.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  215.  
  216.         rada2beg.cinnost = 0
  217.  
  218.         return function()
  219.             switch(rada2beg.cinnost){
  220.                 [0] = function()
  221.                     if random(1000) < 15 then
  222.                         rada2beg.cinnost = random(5) + 2
  223.                         switch(rada2beg.cinnost){
  224.                             [4] = function()
  225.                                 repeat
  226.                                     rada2beg.xicht1 = random(3)
  227.                                 until rada2beg.xicht1 ~= rada2beg.afaze
  228.                                 repeat
  229.                                     rada2beg.xicht2 = random(3)
  230.                                 until rada2beg.xicht2 ~= rada2beg.afaze
  231.                             end,
  232.                             default = function()
  233.                                 if isIn(rada2beg.cinnost, {2, 3}) then
  234.                                     repeat
  235.                                         rada2beg.xicht1 = random(3)
  236.                                     until rada2beg.xicht1 ~= rada2beg.afaze
  237.                                 end
  238.                             end,
  239.                         }
  240.                         rada2beg.faze = 0
  241.                     end
  242.                 end,
  243.                 [1] = function()
  244.                     rada2beg.cinnost = random(3) + 2
  245.                     rada2beg.xicht1 = random(3)
  246.                     rada2beg.xicht2 = random(3)
  247.                     rada2beg.faze = 0
  248.                 end,
  249.                 [2] = function()
  250.                     if odd(game_getCycles()) then
  251.                         advices2[rada2beg.faze].afaze = rada2beg.xicht1
  252.                         rada2beg.faze = rada2beg.faze + 1
  253.                         if rada2beg.faze > advices2_end then
  254.                             rada2beg.cinnost = 0
  255.                         end
  256.                     end
  257.                 end,
  258.                 [3] = function()
  259.                     if odd(game_getCycles()) then
  260.                         advices2[advices2_end - rada2beg.faze].afaze = rada2beg.xicht1
  261.                         rada2beg.faze = rada2beg.faze + 1
  262.                         if advices2_end - rada2beg.faze < 0 then
  263.                             rada2beg.cinnost = 0
  264.                         end
  265.                     end
  266.                 end,
  267.                 [4] = function()
  268.                     if odd(game_getCycles()) then
  269.                         advices2[rada2beg.faze].afaze = rada2beg.xicht1
  270.                         advices2[advices2_end - rada2beg.faze].afaze = rada2beg.xicht2
  271.                         rada2beg.faze = rada2beg.faze + 1
  272.                         if rada2beg.faze > advices2_end then
  273.                             rada2beg.cinnost = 0
  274.                         end
  275.                     end
  276.                 end,
  277.                 [5] = function()
  278.                     if random(1000) < 15 then
  279.                         rada2beg.cinnost = 1
  280.                     elseif random(100) < 20 then
  281.                         pom1 = random(advices2_end + 1)
  282.                         advices2[pom1].afaze = random(3)
  283.                     end
  284.                 end,
  285.                 [6] = function()
  286.                     if random(1000) < 15 then
  287.                         rada2beg.cinnost = 1
  288.                     elseif random(100) < 50 then
  289.                         pom1 = random(advices2_end + 1)
  290.                         if random(100) < 20 then
  291.                             advices2[pom1].afaze = random(3)
  292.                         else
  293.                             switch(random(2)){
  294.                                 [0] = function()
  295.                                     if pom1 > 0 then
  296.                                         advices2[pom1].afaze = advices2[pom1 - 1].afaze
  297.                                     end
  298.                                 end,
  299.                                 [1] = function()
  300.                                     if pom1 < advices2_end then
  301.                                         advices2[pom1].afaze = advices2[pom1 + 1].afaze
  302.                                     end
  303.                                 end,
  304.                             }
  305.                         end
  306.                     end
  307.                 end,
  308.                 [7] = function()
  309.                     rada2beg.cinnost = 4
  310.                     rada2beg.xicht1 = 1
  311.                     rada2beg.xicht2 = 1
  312.                     rada2beg.faze = 0
  313.                 end,
  314.             }
  315.             for index, advice in advices2 do
  316.                 advice:updateAnim()
  317.             end
  318.         end
  319.     end
  320.  
  321.     -- -------------------------------------------------------------
  322.     local function prog_init_sochoradi()
  323.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  324.  
  325.         sochoradi.cinnost = 0
  326.  
  327.         return function()
  328.             if isIn(sochoradi.cinnost, {4, 5, 7}) then
  329.                 sound_playSound("impact_light")
  330.             end
  331.             switch(sochoradi.cinnost){
  332.                 [0] = function()
  333.                     if sochoradi.dir == dir_up then
  334.                         sochoradi.cinnost = sochoradi.cinnost + 1
  335.                     end
  336.                 end,
  337.                 [8] = function()
  338.                     rada1beg.cinnost = 7
  339.                     sochoradi.cinnost = sochoradi.cinnost + 1
  340.                 end,
  341.                 default = function()
  342.                     if 1 <= sochoradi.cinnost and sochoradi.cinnost <= 7 then
  343.                         sochoradi.afaze = sochoradi.cinnost
  344.                         sochoradi.cinnost = sochoradi.cinnost + 1
  345.                     end
  346.                 end,
  347.             }
  348.             sochoradi:updateAnim()
  349.         end
  350.     end
  351.  
  352.     -- -------------------------------------------------------------
  353.     local function prog_init_chlapik()
  354.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  355.  
  356.         chlapik.cinnost = 0
  357.  
  358.         return function()
  359.             if isIn(chlapik.cinnost, {5, 9}) then
  360.                 sound_playSound("impact_light")
  361.             end
  362.             switch(chlapik.cinnost){
  363.                 [0] = function()
  364.                     if chlapik.dir == dir_down then
  365.                         chlapik.cinnost = chlapik.cinnost + 1
  366.                     end
  367.                 end,
  368.                 [1] = function()
  369.                     if chlapik.dir == dir_no then
  370.                         chlapik.afaze = 1
  371.                         chlapik.cinnost = chlapik.cinnost + 1
  372.                         small:killSound()
  373.                         game_killPlan()
  374.                         if isReady(small) then
  375.                             addm(2, "sl-m-jekot")
  376.                             if isReady(big) then
  377.                                 addv(0, "sl-v-barbarka")
  378.                             end
  379.                             addm(20 + random(20), "sl-m-nelibila")
  380.                         end
  381.                     end
  382.                 end,
  383.                 [10] = function()
  384.                     rada1beg.cinnost = 7
  385.                     chlapik.cinnost = chlapik.cinnost + 1
  386.                 end,
  387.                 default = function()
  388.                     if 2 <= chlapik.cinnost and chlapik.cinnost <= 9 then
  389.                         chlapik.afaze = chlapik.cinnost
  390.                         chlapik.cinnost = chlapik.cinnost + 1
  391.                     end
  392.                 end,
  393.             }
  394.             chlapik:updateAnim()
  395.         end
  396.     end
  397.  
  398.     -- --------------------
  399.     local update_table = {}
  400.     local subinit
  401.     subinit = prog_init_room()
  402.     if subinit then
  403.         table.insert(update_table, subinit)
  404.     end
  405.     subinit = prog_init_samotna()
  406.     if subinit then
  407.         table.insert(update_table, subinit)
  408.     end
  409.     subinit = prog_init_rada1beg()
  410.     if subinit then
  411.         table.insert(update_table, subinit)
  412.     end
  413.     subinit = prog_init_rada2beg()
  414.     if subinit then
  415.         table.insert(update_table, subinit)
  416.     end
  417.     subinit = prog_init_sochoradi()
  418.     if subinit then
  419.         table.insert(update_table, subinit)
  420.     end
  421.     subinit = prog_init_chlapik()
  422.     if subinit then
  423.         table.insert(update_table, subinit)
  424.     end
  425.     return update_table
  426. end
  427. local update_table = prog_init()
  428.  
  429.  
  430. -- -----------------------------------------------------------------
  431. -- Update
  432. -- -----------------------------------------------------------------
  433. function prog_update()
  434.     for key, subupdate in pairs(update_table) do
  435.         subupdate()
  436.     end
  437. end
  438.  
  439.